package com.core.gig.negocio;


import java.io.Serializable;
import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


@Entity
@Table(name = "TB_PLANO")
@SequenceGenerator(name = "SQ_PLANO", sequenceName = "SQ_PLANO")
public class Plano implements Serializable
{

	private static final long serialVersionUID = -7306690632620152509L;
	private int id;
	private int numero;
	private String nome;
	private int largura;
	private int altura;
	private int montagem;
	private boolean tiraRetira;
	private int paginas;
	private int coresFrente;
	private int coresVerso;
	private int formatoFinal;
	private double quebra;
	private int numeradores;
	private String tipoImpressao;
	private double ocupacaoTinta;
	private int chapas;
	private String observacoes;
	private Tinta tinta;
	private Papel papel;
	private AtivoImpressao ativoImpressao;
	private Orcamento orcamento;
	private Collection<Servico> servicosPosImpressao;

	@Id
	@Column (name = "ID")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQ_PLANO")
	public int getId()
	{
		return id;
	}

	@Column(name = "NUMERO", nullable = false)
	public int getNumero()
	{
		return numero;
	}

	@Column(name = "NOME", nullable = false, length = 20)
	public String getNome()
	{
		return nome;
	}

	@Column(name = "LARGURA", nullable = false)
	public int getLargura()
	{
		return largura;
	}

	@Column(name = "ALTURA", nullable = false)
	public int getAltura()
	{
		return altura;
	}

	@Column(name = "MONTAGEM", nullable = false)
	public int getMontagem()
	{
		return montagem;
	}

	@Column(name = "TIRA_RETIRA", nullable = false)
	public boolean isTiraRetira()
	{
		return tiraRetira;
	}

	@Column(name = "PAGINAS", nullable = false)
	public int getPaginas()
	{
		return paginas;
	}

	@Column(name = "CORES_FRENTE", nullable = false)
	public int getCoresFrente()
	{
		return coresFrente;
	}

	@Column(name = "CORES_VERSO", nullable = false)
	public int getCoresVerso()
	{
		return coresVerso;
	}

	@Column(name = "FORMATO_FINAL", nullable = false)
	public int getFormatoFinal()
	{
		return formatoFinal;
	}

	@Column(name = "QUEBRA", nullable = false, precision = 2)
	public double getQuebra()
	{
		return quebra;
	}

	@Column(name = "NUMERADORES", nullable = false)
	public int getNumeradores()
	{
		return numeradores;
	}

	@Column(name = "TIPO_IMPRESSAO", nullable = false, length = 20)
	public String getTipoImpressao()
	{
		return tipoImpressao;
	}

	@Column(name = "OCUPACAO_TINTA", nullable = false, precision = 2)
	public double getOcupacaoTinta()
	{
		return ocupacaoTinta;
	}

	@Column(name = "CHAPAS", nullable = false)
	public int getChapas()
	{
		return chapas;
	}

	@Column(name = "OBSERVACOES", nullable = false, length = 4000)
	public String getObservacoes()
	{
		return observacoes;
	}

	@ManyToOne
	@JoinColumn(name = "FK_TINTA_ID")
	public Tinta getTinta()
	{
		return tinta;
	}

	@ManyToOne
	@JoinColumn(name = "FK_PAPEL_ID")
	public Papel getPapel()
	{
		return papel;
	}

	@ManyToOne
	@JoinColumn(name = "FK_ATIVO_IMPR_ID")
	public AtivoImpressao getAtivoImpressao()
	{
		return ativoImpressao;
	}

	@ManyToOne
	@JoinColumn(name = "FK_ORCAMENTO_ID")
	public Orcamento getOrcamento()
	{
		return orcamento;
	}

	@ManyToMany(targetEntity = com.core.gig.negocio.Servico.class, cascade = {
			CascadeType.PERSIST, CascadeType.MERGE })
	@JoinTable(name = "TB_PLANO_SERVICO", joinColumns = { @JoinColumn(name = "FK_PLANO_ID") }, inverseJoinColumns = { @JoinColumn(name = "FK_SERVICO_ID") })
	public Collection<Servico> getServicosPosImpressao()
	{
		return servicosPosImpressao;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public void setNumero(int numero)
	{
		this.numero = numero;
	}

	public void setNome(String nome)
	{
		this.nome = nome;
	}

	public void setLargura(int largura)
	{
		this.largura = largura;
	}

	public void setAltura(int altura)
	{
		this.altura = altura;
	}

	public void setMontagem(int montagem)
	{
		this.montagem = montagem;
	}

	public void setTiraRetira(boolean tiraRetira)
	{
		this.tiraRetira = tiraRetira;
	}

	public void setPaginas(int paginas)
	{
		this.paginas = paginas;
	}

	public void setCoresFrente(int coresFrente)
	{
		this.coresFrente = coresFrente;
	}

	public void setCoresVerso(int coresVerso)
	{
		this.coresVerso = coresVerso;
	}

	public void setFormatoFinal(int formatoFinal)
	{
		this.formatoFinal = formatoFinal;
	}

	public void setQuebra(double quebra)
	{
		this.quebra = quebra;
	}

	public void setNumeradores(int numeradores)
	{
		this.numeradores = numeradores;
	}

	public void setTipoImpressao(String tipoImpressao)
	{
		this.tipoImpressao = tipoImpressao;
	}

	public void setOcupacaoTinta(double ocupacaoTinta)
	{
		this.ocupacaoTinta = ocupacaoTinta;
	}

	public void setChapas(int chapas)
	{
		this.chapas = chapas;
	}

	public void setObservacoes(String observacoes)
	{
		this.observacoes = observacoes;
	}

	public void setTinta(Tinta tinta)
	{
		this.tinta = tinta;
	}

	public void setPapel(Papel papel)
	{
		this.papel = papel;
	}

	public void setAtivoImpressao(AtivoImpressao ativoImpressao)
	{
		this.ativoImpressao = ativoImpressao;
	}

	public void setOrcamento(Orcamento orcamento)
	{
		this.orcamento = orcamento;
	}

	public void setServicosPosImpressao(
			Collection<Servico> servicosPosImpressao)
	{
		this.servicosPosImpressao = servicosPosImpressao;
	}
}